注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。
注意:Graphicsクラスを使ってコントロールに画像を表示する方法の説明は、「コントロールやフォームに画像を表示する」に移動しました。
画像を描画するには、Graphics.DrawImageメソッドを使います。描画したいImageオブジェクトと、描画する位置、サイズを指定します。
以下の例では、画像ファイル「C:\test\1.bmp」をPictureBoxコントロール(PictureBox1)の (20, 10) の位置に、基の画像と同じ大きさ(ピクセルサイズ)で表示しています。
'Imports System.Drawing '描画先とするImageオブジェクトを作成する Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height) 'ImageオブジェクトのGraphicsオブジェクトを作成する Dim g As Graphics = Graphics.FromImage(canvas) '画像ファイルを読み込んで、Imageオブジェクトとして取得する Dim img As Image = Image.FromFile("C:\test\1.bmp") '画像をcanvasの座標(20, 10)の位置に描画する g.DrawImage(img, 20, 10, img.Width, img.Height) 'Imageオブジェクトのリソースを解放する img.Dispose() 'Graphicsオブジェクトのリソースを解放する g.Dispose() 'PictureBox1に表示する PictureBox1.Image = canvas
//using System.Drawing; //描画先とするImageオブジェクトを作成する Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height); //ImageオブジェクトのGraphicsオブジェクトを作成する Graphics g = Graphics.FromImage(canvas); //画像ファイルを読み込んで、Imageオブジェクトとして取得する Image img = Image.FromFile(@"C:\test\1.bmp"); //画像をcanvasの座標(20, 10)の位置に描画する g.DrawImage(img, 20, 10, img.Width, img.Height); //Imageオブジェクトのリソースを解放する img.Dispose(); //Graphicsオブジェクトのリソースを解放する g.Dispose(); //PictureBox1に表示する PictureBox1.Image = canvas;
上の例で使用しているGraphics.FromImageメソッドについては「プログラムで画像を動的に作成する」を、Image.FromFileメソッドについては「画像ファイルを読み込み、Imageオブジェクトを作成する」をご覧ください。
上の例では、座標と大きさを指定してDrawImageメソッドを呼び出しています。DrawImageメソッドは大きさを指定しないで呼び出すこともでき、その場合は画像の大きさで描画されます。よって画像と同じ大きさで描画するならば指定する必要がないように思えますが、そうとも言えません。大きさを指定しないと、予想外の大きさで描画されることがありますし、パフォーマンスも低下します。
というのは、DrawImageメソッドに大きさを指定しなかった時に描画される画像の大きさというのが、物理的な大きさだからです。そのためDrawImageメソッドは画像の解像度(dpi)情報を使って計算した物理的な大きさに拡大あるいは縮小して描画します。これは、GDI+の自動スケーリングといわれる機能です。
自動スケーリングは、そうさせたいのであれば便利な機能かもしれませんが、ほとんどの場合ありがた迷惑です。自動スケーリングをしないで、元のピクセルサイズで画像を描画するには、上記の例のように、画像のピクセルサイズを指定してDrawImageメソッドを呼び出します。詳しくは「方法 : 自動スケーリングを解除してパフォーマンスを向上させる」をご覧ください。
補足:DrawImageメソッドの代わりにGraphics.DrawImageUnscaledメソッドを使用すると、大きさを指定しても無視して、自動スケーリングされます。
基の画像のサイズと違うサイズを指定してGraphics.DrawImageメソッドで描画すると、そのサイズに画像が拡大、縮小されて描画されます。これを使用して、画像の縮小、拡大(スケーリング)が簡単にできます。
次の例では、もとの画像を2倍(ピクセルサイズ)にしてPictureBox1に表示しています。
'Imports System.Drawing '描画先とするImageオブジェクトを作成する Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height) 'ImageオブジェクトのGraphicsオブジェクトを作成する Dim g As Graphics = Graphics.FromImage(canvas) '画像ファイルを読み込んで、Imageオブジェクトとして取得する Dim img As Image = Image.FromFile("C:\test\1.bmp") '画像のサイズを2倍にしてcanvasに描画する g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2) 'Imageオブジェクトのリソースを解放する img.Dispose() 'Graphicsオブジェクトのリソースを解放する g.Dispose() 'PictureBox1に表示する PictureBox1.Image = canvas
//using System.Drawing; //描画先とするImageオブジェクトを作成する Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height); //ImageオブジェクトのGraphicsオブジェクトを作成する Graphics g = Graphics.FromImage(canvas); //画像ファイルを読み込んで、Imageオブジェクトとして取得する Image img = Image.FromFile(@"C:\test\1.bmp"); //画像のサイズを2倍にしてcanvasに描画する g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2); //Imageオブジェクトのリソースを解放する img.Dispose(); //Graphicsオブジェクトのリソースを解放する g.Dispose(); //PictureBox1に表示する PictureBox1.Image = canvas;
補間方法を指定すると、よりきれいに画像を拡大、縮小できるかもしれません。その方法については、「補間方法を指定して画像を拡大、縮小(スケーリング)表示する」で説明しています。また、サムネールイメージ(縮小イメージ)を作成する方法については、「サムネールイメージの作成」で説明しています。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。